<template>
    <uni-popup ref="popupRef" class="privacy-popup" type="bottom" :is-mask-click="false" :safe-area="false">
        <view class="privacy-popup-body">
            <view class="privacy-popup-title">用户隐私保护提示</view>
            感谢您使用本程序，您使用本程序前应当阅读并同意<text class="privacy-title" @tap="openPrivacyContract">{{
                privacyTitle
            }}</text
            >。
            <view>
                当您点击同意并开始使用产品服务时，即表示您已理解并同意该条款内容，该条款将对您产生法律约束力。如您不同意，将无法正常使用小程序。
            </view>
            <view class="privacy-popup-footer">
                <button id="disagree-btn" type="default" @tap="handleDisagree">不同意</button>
                <button id="agree-btn" open-type="agreePrivacyAuthorization" @agreeprivacyauthorization="handleAgree">
                    同意
                </button>
            </view>
        </view>
    </uni-popup>
</template>

<script setup>
import { onMounted, ref } from 'vue';
import { onShow } from '@dcloudio/uni-app';

const props = defineProps({
    // disabledScroll: {
    //     type: Boolean,
    //     default: false
    // },
    isHandleTabBar: {
        type: Boolean,
        default: false
    }
});

let resolvePrivacyAuthorization = ref(); // 隐私api-resolve
let privacyTitle = ref('《用户隐私保护指引》'); // 隐私标题
let show = ref(false); // 弹窗展示/隐藏

let popupRef = ref();
/**
 * 控制popup
 * @param visible
 */
const handlePopup = visible => {
    show.value = visible;
    popupRef?.value[visible ? 'open' : 'close']();
};
/**
 * 控制打开弹窗
 */
const open = () => {
    if (props.isHandleTabBar) {
        uni?.hideTabBar({
            /**
             * 隐藏tabbar之后执行（无论隐藏tabbar成功错误）
             */
            complete: () => {
                handlePopup(true);
            }
        });
        return;
    }
    handlePopup(true);
};

/**
 * 控制关闭弹窗
 */
const close = () => {
    if (props.isHandleTabBar) {
        uni?.showTabBar({
            /**
             * 隐藏tabbar之后执行（无论展示tabbar成功错误）
             */
            complete: () => {
                handlePopup(false);
            }
        });
        return;
    }
    handlePopup(false);
};

/**
 * 用户点击拒绝按钮后
 */
const handleDisagree = () => {
    resolvePrivacyAuthorization.value({ event: 'disagree' });
    close();
};

/**
 * 用户点击同意按钮后
 */
const handleAgree = () => {
    resolvePrivacyAuthorization.value({ buttonId: 'agree-btn', event: 'agree' });
    close();
};

/**
 * 打开隐私协议
 */
const openPrivacyContract = () => {
    wx.openPrivacyContract();
};

onShow(() => {
    if (wx.onNeedPrivacyAuthorization) {
        wx.onNeedPrivacyAuthorization(resolve => {
            open();
            resolvePrivacyAuthorization.value = resolve;
        });
    } else {
        // 低版本不支持获取
        // 低版本基础库不支持 wx.onNeedPrivacyAuthorization 接口，隐私接口可以直接调用
    }
});
</script>

<style lang="scss" src="./style.scss" scoped></style>
